﻿//PlazaTableRegistry.cs
//Copyright (c) 2013 StockSharp LLC, all rights reserved.
//This code module is part of StockSharp library.
//This code is licensed under the GNU GENERAL PUBLIC LICENSE Version 3.
//See the file License.txt for the license details.
//More info on: http://stocksharp.com

namespace StockSharp.Plaza.Metadata
{
	using System;
	using System.Collections.Generic;
	using System.Linq;

	using Ecng.Common;

	using StockSharp.BusinessEntities;

	static class PlazaTableSystemName
	{
		public const string BaseContractsParams = "base_contracts_params";
		public const string BrokerParams = "broker_params";
		public const string ClientParams = "client_params";
		public const string Common = "common";
		public const string Deal = "deal";
		public const string DeliveryReport = "delivery_report";
		public const string Diler = "diler";
		public const string FutBondIsin = "fut_bond_isin";
		public const string FutBondNkd = "fut_bond_nkd";
		public const string FutBondNominal = "fut_bond_nominal";
		public const string FutBondRegistry = "fut_bond_registry";
		public const string FutInstruments = "fut_instruments";
		public const string FutInterClearingInfo = "fut_intercl_info";
		public const string FutMarketMakingInfo = "fut_MM_info";
		public const string FutRejectedOrders = "fut_rejected_orders";
		public const string FutSessionContents = "fut_sess_contents";
		public const string FutSessionSettlement = "fut_sess_settl";
		public const string FutVcb = "fut_vcb";
		public const string FutVm = "fut_vm";
		public const string FutParams = "futures_params";
		public const string HeartBeat = "heartbeat";
		public const string Info = "info";
		public const string Investr = "investr";
		public const string MoneyClearing = "money_clearing";
		public const string MultiLegDeal = "multileg_deal";
		public const string MultiLegDict = "multileg_dict";
		public const string MultiLegOrdersLog = "multileg_orders_log";
		public const string OptExpirationOrders = "opt_exp_orders";
		public const string OptInterClearingInfo = "opt_intercl_info";
		public const string OptMarketMakingInfo = "opt_MM_info";
		public const string OptRejectedOrders = "opt_rejected_orders";
		public const string OptSessionContents = "opt_sess_contents";
		public const string OptSessionSettlement = "opt_sess_settl";
		public const string OptVcb = "opt_vcb";
		public const string OptVm = "opt_vm";
		public const string OptParams = "options_params";
		public const string Orders = "orders";
		public const string OrdersAggr = "orders_aggr";
		public const string OrdersLog = "orders_log";
		public const string Portfolio = "part";
		public const string Position = "position";
		public const string Index = "rts_index";
		public const string IndexLog = "rts_index_log";
		public const string Session = "session";
		public const string SysMessages = "sys_messages";
		public const string SysEvents = "sys_events";
		public const string UsdOnline = "usd_online";
		//public const string UserDeal = "user_deal";
		public const string VirtualFuturesParams = "virtual_futures_params";
		public const string Volatility = "volat";
		public const string VolatilityCoeff = "volat_coeff";

		public const string McxTrades = "ALL_TRADES";
		public const string McxCommon = "COMMON";
		public const string McxOrderBook = "ORDERBOOK";
		public const string McxSecurities = "SECURITIES";
		public const string McxCurrency = "CURRENCY";
		public const string McxBoards = "BOARDS";
		public const string McxMarkets = "MARKETS";
		public const string McxSettleCodes = "SETTLECODES";		
		public const string McxTeSysTime = "TESYSTIME";
		public const string McxTradeTime = "TRADETIME";
		public const string McxBcMessages = "BCMESSAGES";
		public const string McxTeInfo = "TEINFO";
		public const string McxTrdTimeTypes = "TRDTIMETYPES";
		public const string McxSecSettleCode = "SEC_SETTLECODE";
	}

	/// <summary>
	/// Реестр всех таблиц сервера Плазы.
	/// </summary>
	public class PlazaTableRegistry
	{
		/// <summary>
		/// Создать <see cref="PlazaTableRegistry"/>.
		/// </summary>
		public PlazaTableRegistry()
		{
			ColumnRegistry = new PlazaColumnRegistry();
			StreamRegistry = new PlazaStreamRegistry();

			var tables = new List<PlazaTable>();

			tables.Add(OrdersLogFuture = new PlazaTable(PlazaTableSystemName.OrdersLog, "Фьючерсы: журнал заявок", StreamRegistry.TradeFuture, ColumnRegistry.OrdersLogFuture, SecurityTypes.Future));
			tables.Add(TradeFuture = new PlazaTable(PlazaTableSystemName.Deal, "Фьючерсы: журнал сделок", StreamRegistry.TradeFuture, ColumnRegistry.TradeFuture, SecurityTypes.Future));
			tables.Add(MultiLegDealFuture = new PlazaTable(PlazaTableSystemName.MultiLegDeal, "Фьючерсы: журнал сделок по связкам", StreamRegistry.TradeFuture, ColumnRegistry.MultiLegDealFuture, SecurityTypes.Future));
			tables.Add(MultiLegOrdersLogFuture = new PlazaTable(PlazaTableSystemName.MultiLegOrdersLog, "Фьючерсы: журнал заявок по связкам", StreamRegistry.TradeFuture, ColumnRegistry.MultiLegOrdersLogFuture, SecurityTypes.Future));
			tables.Add(HeartBeatFuture = new PlazaTable(PlazaTableSystemName.HeartBeat, "Фьючерсы: служебная таблица серверных часов", StreamRegistry.TradeFuture, ColumnRegistry.HeartBeatFuture, SecurityTypes.Future));
			tables.Add(TradeFutureSysEvents = new PlazaTable(PlazaTableSystemName.SysEvents, "Таблица событий", StreamRegistry.TradeFuture, ColumnRegistry.SysEventsTradeFuture, SecurityTypes.Future));

			tables.Add(OrdersLogOption = new PlazaTable(PlazaTableSystemName.OrdersLog, "Опционы: журнал заявок", StreamRegistry.TradeOption, ColumnRegistry.OrdersLogOption, SecurityTypes.Option));
			tables.Add(TradeOption = new PlazaTable(PlazaTableSystemName.Deal, "Опционы: журнал сделок", StreamRegistry.TradeOption, ColumnRegistry.TradeOption, SecurityTypes.Option));
			tables.Add(HeartBeatOption = new PlazaTable(PlazaTableSystemName.HeartBeat, "Опционы: служебная таблица серверных часов", StreamRegistry.TradeOption, ColumnRegistry.HeartBeatOption, SecurityTypes.Option));
			tables.Add(TradeOptionSysEvents = new PlazaTable(PlazaTableSystemName.SysEvents, "Таблица событий", StreamRegistry.TradeOption, ColumnRegistry.SysEventsTradeOption, SecurityTypes.Option));

			tables.Add(AnonymousOrdersLog = new PlazaTable(PlazaTableSystemName.OrdersLog, "Журнал заявок. Анонимный order_log", StreamRegistry.OrdersLog, ColumnRegistry.AnonymousOrdersLog, SecurityTypes.Future, SecurityTypes.Option));
			tables.Add(AnonymousMultiLegOrdersLog = new PlazaTable(PlazaTableSystemName.MultiLegOrdersLog, "Журнал заявок по связкам. Анонимный order_log", StreamRegistry.OrdersLog, ColumnRegistry.AnonymousMultiLegOrdersLog, SecurityTypes.Future, SecurityTypes.Option));
			tables.Add(AnonymousSysEvents = new PlazaTable(PlazaTableSystemName.SysEvents, "Таблица событий", StreamRegistry.OrdersLog, ColumnRegistry.SysEventsOrdersLog, SecurityTypes.Future, SecurityTypes.Option));

			tables.Add(OrderBookInfoFuture = new PlazaTable(PlazaTableSystemName.Info, "Фьючерсы: срез стакана (информация о стаканах)", StreamRegistry.OrderBookFuture, ColumnRegistry.OrderBookInfoFuture, SecurityTypes.Future));
			tables.Add(OrderBookOrdersFuture = new PlazaTable(PlazaTableSystemName.Orders, "Фьючерсы: срез стакана (логовая таблица заявок)", StreamRegistry.OrderBookFuture, ColumnRegistry.OrderBookOrdersFuture, SecurityTypes.Future));
			tables.Add(OrderBookInfoOption = new PlazaTable(PlazaTableSystemName.Info, "Опционы: срез стакана (информация о стаканах)", StreamRegistry.OrderBookOption, ColumnRegistry.OrderBookInfoOption, SecurityTypes.Option));
			tables.Add(OrderBookOrdersOption = new PlazaTable(PlazaTableSystemName.Orders, "Опционы: срез стакана (логовая таблица заявок)", StreamRegistry.OrderBookOption, ColumnRegistry.OrderBookOrdersOption, SecurityTypes.Option));

			tables.Add(CommonFuture = new PlazaTable(PlazaTableSystemName.Common, "Фьючерсы: общая информация по сессии", StreamRegistry.CommonFuture, ColumnRegistry.CommonFuture, SecurityTypes.Future));
			tables.Add(CommonOption = new PlazaTable(PlazaTableSystemName.Common, "Опционы: общая информация по сессии", StreamRegistry.CommonOption, ColumnRegistry.CommonOption, SecurityTypes.Option));

			tables.Add(Aggregation20Future = new PlazaTable(PlazaTableSystemName.OrdersAggr, "Фьючерсы: стакан глубиной 20 котировок", StreamRegistry.Aggregation20Future, ColumnRegistry.Aggregation20Future, SecurityTypes.Future));
			tables.Add(Aggregation20Option = new PlazaTable(PlazaTableSystemName.OrdersAggr, "Опционы: стакан глубиной 20 котировок", StreamRegistry.Aggregation20Option, ColumnRegistry.Aggregation20Option, SecurityTypes.Option));
			tables.Add(Aggregation50Future = new PlazaTable(PlazaTableSystemName.OrdersAggr, "Фьючерсы: стакан глубиной 50 котировок", StreamRegistry.Aggregation50Future, ColumnRegistry.Aggregation50Future, SecurityTypes.Future));
			tables.Add(Aggregation50Option = new PlazaTable(PlazaTableSystemName.OrdersAggr, "Опционы: стакан глубиной 50 котировок", StreamRegistry.Aggregation50Option, ColumnRegistry.Aggregation50Option, SecurityTypes.Option));
			tables.Add(Aggregation5Future = new PlazaTable(PlazaTableSystemName.OrdersAggr, "Фьючерсы: стакан глубиной 5 котировок", StreamRegistry.Aggregation5Future, ColumnRegistry.Aggregation5Future, SecurityTypes.Future));
			tables.Add(Aggregation5Option = new PlazaTable(PlazaTableSystemName.OrdersAggr, "Опционы: стакан глубиной 5 котировок", StreamRegistry.Aggregation5Option, ColumnRegistry.Aggregation5Option, SecurityTypes.Option));

			tables.Add(Positions = new PlazaTable(PlazaTableSystemName.Position, "Позиции клиентов", StreamRegistry.Positions, ColumnRegistry.Positions));
			tables.Add(PositionsSysEvents = new PlazaTable(PlazaTableSystemName.SysEvents, "Таблица событий", StreamRegistry.Positions, ColumnRegistry.SysEventsPositions));

			tables.Add(Portfolios = new PlazaTable(PlazaTableSystemName.Portfolio, "Средства и лимиты клиентов", StreamRegistry.Portfolios, ColumnRegistry.Portfolios));
			tables.Add(PortfoliosSysEvents = new PlazaTable(PlazaTableSystemName.SysEvents, "Таблица событий", StreamRegistry.Portfolios, ColumnRegistry.SysEventsPortfolios));

			tables.Add(DeliveryReportFuture = new PlazaTable(PlazaTableSystemName.DeliveryReport, "Фьючерсы: отчет о поставке", StreamRegistry.InfoFuture, ColumnRegistry.DeliveryReportFuture, SecurityTypes.Future));
			tables.Add(RejectedOrdersFuture = new PlazaTable(PlazaTableSystemName.FutRejectedOrders, "Фьючерсы: отвергнутые в клиринг заявки", StreamRegistry.InfoFuture, ColumnRegistry.RejectedOrdersFuture, SecurityTypes.Future));
			tables.Add(InterClearingInfoFuture = new PlazaTable(PlazaTableSystemName.FutInterClearingInfo, "Фьючерсы: информация о ВМ, рассчитанной по результатам пром. клиринга", StreamRegistry.InfoFuture, ColumnRegistry.InterClearingInfoFuture, SecurityTypes.Future));
			tables.Add(BondRegistryFuture = new PlazaTable(PlazaTableSystemName.FutBondRegistry, "Фьючерсы: справочник параметров облигаций", StreamRegistry.InfoFuture, ColumnRegistry.BondRegistryFuture, SecurityTypes.Future));
			tables.Add(BondIsinFuture = new PlazaTable(PlazaTableSystemName.FutBondIsin, "Фьючерсы: справочник инструментов облигаций", StreamRegistry.InfoFuture, ColumnRegistry.BondIsinFuture, SecurityTypes.Future));
			tables.Add(BondNkdFuture = new PlazaTable(PlazaTableSystemName.FutBondNkd, "Фьючерсы: НКД на даты выплат купонов", StreamRegistry.InfoFuture, ColumnRegistry.BondNkdFuture, SecurityTypes.Future));
			tables.Add(BondNominalFuture = new PlazaTable(PlazaTableSystemName.FutBondNominal, "Фьючерсы: размеры выплат номинальной стоимости облигации", StreamRegistry.InfoFuture, ColumnRegistry.BondNominalFuture, SecurityTypes.Future));
			tables.Add(UsdOnline = new PlazaTable(PlazaTableSystemName.UsdOnline, "Трансляция курса USD", StreamRegistry.InfoFuture, ColumnRegistry.UsdOnline));
			tables.Add(VcbFuture = new PlazaTable(PlazaTableSystemName.FutVcb, "Фьючерсы", StreamRegistry.InfoFuture, ColumnRegistry.VcbFuture, SecurityTypes.Future));
			tables.Add(Session = new PlazaTable(PlazaTableSystemName.Session, "Фьючерсы: информация о торговой сессии", StreamRegistry.InfoFuture, ColumnRegistry.Session));
			tables.Add(MultiLeg = new PlazaTable(PlazaTableSystemName.MultiLegDict, "Справочник связок", StreamRegistry.InfoFuture, ColumnRegistry.MultiLegFuture, SecurityTypes.Future));
			tables.Add(SessionContentsFuture = new PlazaTable(PlazaTableSystemName.FutSessionContents, "Фьючерсы: cправочник торгуемых инструментов", StreamRegistry.InfoFuture, ColumnRegistry.SessionContentsFuture, SecurityTypes.Future));
			tables.Add(Securities = new PlazaTable(PlazaTableSystemName.FutInstruments, "Cправочник инструментов", StreamRegistry.InfoFuture, ColumnRegistry.Future, SecurityTypes.Future));
			tables.Add(Diler = new PlazaTable(PlazaTableSystemName.Diler, "Справочник имен фирм", StreamRegistry.InfoFuture, ColumnRegistry.Diler));
			tables.Add(Investor = new PlazaTable(PlazaTableSystemName.Investr, "Справочник клиентов", StreamRegistry.InfoFuture, ColumnRegistry.Investor));
			tables.Add(SessionSettlementFuture = new PlazaTable(PlazaTableSystemName.FutSessionSettlement, "Фьючерсы: результаты клиринга - расчетные цены", StreamRegistry.InfoFuture, ColumnRegistry.SessionSettlementFuture, SecurityTypes.Future));
			tables.Add(InfoFutureSysMessages = new PlazaTable(PlazaTableSystemName.SysMessages, "Системные сообщения", StreamRegistry.InfoFuture, ColumnRegistry.SysMessages, SecurityTypes.Future));
			tables.Add(InfoFutureSysEvents = new PlazaTable(PlazaTableSystemName.SysEvents, "Таблица событий", StreamRegistry.InfoFuture, ColumnRegistry.SysEventsInfoFuture, SecurityTypes.Future));

			tables.Add(RejectedOrdersOption = new PlazaTable(PlazaTableSystemName.OptRejectedOrders, "Опционы: отвергнутые в клиринг заявки", StreamRegistry.InfoOption, ColumnRegistry.RejectedOrdersOption, SecurityTypes.Option));
			tables.Add(InterClearingInfoOption = new PlazaTable(PlazaTableSystemName.OptInterClearingInfo, "Опционы: информация о ВМ, рассчитанной по результатам пром. клиринга", StreamRegistry.InfoOption, ColumnRegistry.InterClearingInfoOption, SecurityTypes.Option));
			tables.Add(ExpirationOrdersOption = new PlazaTable(PlazaTableSystemName.OptExpirationOrders, "Опционы: заявки на экспирацию", StreamRegistry.InfoOption, ColumnRegistry.ExpirationOrdersOption, SecurityTypes.Option));
			tables.Add(VcbOption = new PlazaTable(PlazaTableSystemName.OptVcb, "Опционы", StreamRegistry.InfoOption, ColumnRegistry.VcbOption, SecurityTypes.Option));
			tables.Add(SessionContentsOption = new PlazaTable(PlazaTableSystemName.OptSessionContents, "Опционы: справочник торгуемых инструментов", StreamRegistry.InfoOption, ColumnRegistry.SessionContentsOption, SecurityTypes.Option));
			tables.Add(SessionSettlementOption = new PlazaTable(PlazaTableSystemName.OptSessionSettlement, "Опционы: результаты клиринга - волатильность и теоретические цены", StreamRegistry.InfoOption, ColumnRegistry.SessionSettlementOption, SecurityTypes.Option));
			tables.Add(InfoOptionSysEvents = new PlazaTable(PlazaTableSystemName.SysEvents, "Таблица событий", StreamRegistry.InfoOption, ColumnRegistry.SysEventsInfoOption, SecurityTypes.Option));

			tables.Add(VolatilitySmile = new PlazaTable(PlazaTableSystemName.VolatilityCoeff, "Таблица с коэффициентами волатильности", StreamRegistry.MiscInfo, ColumnRegistry.VolatilitySmile, SecurityTypes.Option));

			tables.Add(MarketMakingFuture = new PlazaTable(PlazaTableSystemName.FutMarketMakingInfo, "Обязательства ММ по фьючерсам", StreamRegistry.MarketMaking, ColumnRegistry.MarketMakingFutureParams, SecurityTypes.Future));
			tables.Add(MarketMakingOption = new PlazaTable(PlazaTableSystemName.OptMarketMakingInfo, "Обязательства ММ по опционам", StreamRegistry.MarketMaking, ColumnRegistry.MarketMakingOptionParams, SecurityTypes.Option));

			tables.Add(ClearingMoney = new PlazaTable(PlazaTableSystemName.MoneyClearing, "Клиентские деньги в клиринге", StreamRegistry.ClearingMoney, ColumnRegistry.ClearingMoney));
			tables.Add(ClearingMoneySysEvents = new PlazaTable(PlazaTableSystemName.SysEvents, "Таблица событий", StreamRegistry.ClearingMoney, ColumnRegistry.SysEventsClearingMoney));

			// TODO streamRegistry.Clearing

			tables.Add(Index = new PlazaTable(PlazaTableSystemName.Index, "Индексы", StreamRegistry.Index, ColumnRegistry.Index, SecurityTypes.Index));
			tables.Add(IndexLog = new PlazaTable(PlazaTableSystemName.IndexLog, "История значений индексов", StreamRegistry.IndexLog, ColumnRegistry.IndexLog, SecurityTypes.Index));

			tables.Add(VarMarginFuture = new PlazaTable(PlazaTableSystemName.FutVm, "Вариационная маржа по фьючерсам", StreamRegistry.VarMargin, ColumnRegistry.VarMarginFuture, SecurityTypes.Future));
			tables.Add(VarMarginOption = new PlazaTable(PlazaTableSystemName.OptVm, "Вариационная маржа по опционам", StreamRegistry.VarMargin, ColumnRegistry.VarMarginOption, SecurityTypes.Option));

			tables.Add(Volatility = new PlazaTable(PlazaTableSystemName.Volatility, "Волатильность", StreamRegistry.Volatility, ColumnRegistry.Volatility, SecurityTypes.Option));

			tables.Add(BaseContractsParams = new PlazaTable(PlazaTableSystemName.BaseContractsParams, "Параметры базовых контрактов", StreamRegistry.Info, ColumnRegistry.BaseContractsParams, SecurityTypes.Future, SecurityTypes.Option));
			tables.Add(FuturesParams = new PlazaTable(PlazaTableSystemName.FutParams, "Параметры фьючерсов", StreamRegistry.Info, ColumnRegistry.FuturesParams, SecurityTypes.Future));
			tables.Add(VirtualFuturesParams = new PlazaTable(PlazaTableSystemName.VirtualFuturesParams, "Параметры виртуальных фьючерсов", StreamRegistry.Info, ColumnRegistry.VirtualFuturesParams, SecurityTypes.Future));
			tables.Add(OptionsParams = new PlazaTable(PlazaTableSystemName.OptParams, "Параметры опционов", StreamRegistry.Info, ColumnRegistry.OptionsParams, SecurityTypes.Option));
			tables.Add(BrokerParams = new PlazaTable(PlazaTableSystemName.BrokerParams, "Информация о параметрах фирм", StreamRegistry.Info, ColumnRegistry.BrokerParams, SecurityTypes.Future, SecurityTypes.Option));
			tables.Add(ClientParams = new PlazaTable(PlazaTableSystemName.ClientParams, "Информация о параметрах клиентов", StreamRegistry.Info, ColumnRegistry.ClientParams, SecurityTypes.Future, SecurityTypes.Option));
			tables.Add(InfoSysMessages = new PlazaTable(PlazaTableSystemName.SysEvents, "Таблица событий", StreamRegistry.Info, ColumnRegistry.SysEventsInfo, SecurityTypes.Future, SecurityTypes.Option));

			tables.Add(McxTradesSpot = new PlazaTable(PlazaTableSystemName.McxTrades, "Фондовый рынок: все сделки", StreamRegistry.McxTradesSpot, ColumnRegistry.McxTradesSpot, SecurityTypes.Stock));
			tables.Add(McxTradesCurrency = new PlazaTable(PlazaTableSystemName.McxTrades, "Валютный рынок: все сделки", StreamRegistry.McxTradesCurrency, ColumnRegistry.McxTradesCurrency, SecurityTypes.Stock));
			tables.Add(McxCommonSpot = new PlazaTable(PlazaTableSystemName.McxCommon, "Фондовый рынок: общая информация по инструментам", StreamRegistry.McxCommonSpot, ColumnRegistry.McxCommonSpot, SecurityTypes.Stock));
			tables.Add(McxCommonCurrency = new PlazaTable(PlazaTableSystemName.McxCommon, "Валютный рынок: общая информация по инструментам", StreamRegistry.McxCommonCurrency, ColumnRegistry.McxCommonCurrency, SecurityTypes.Stock));
			tables.Add(McxOrderBookSpot = new PlazaTable(PlazaTableSystemName.McxOrderBook, "Фондовый рынок: котировки по инструментам", StreamRegistry.McxAggrSpot, ColumnRegistry.McxOrderBookSpot, SecurityTypes.Stock));
			tables.Add(McxOrderBookCurrency = new PlazaTable(PlazaTableSystemName.McxOrderBook, "Валютный рынок: котировки по инструментам", StreamRegistry.McxAggrCurrency, ColumnRegistry.McxOrderBookCurrency, SecurityTypes.Stock));
			tables.Add(McxSecuritiesSpot = new PlazaTable(PlazaTableSystemName.McxSecurities, "Фондовый рынок: параметры инструментов", StreamRegistry.McxInfoSpot, ColumnRegistry.McxSecuritiesSpot, SecurityTypes.Stock));
			tables.Add(McxSecuritiesCurrency = new PlazaTable(PlazaTableSystemName.McxSecurities, "Валютный рынок: параметры инструментов", StreamRegistry.McxInfoCurrency, ColumnRegistry.McxSecuritiesCurrency, SecurityTypes.Stock));
			tables.Add(McxCurrencySpot = new PlazaTable(PlazaTableSystemName.McxCurrency, "Фондовый рынок: справочник валют", StreamRegistry.McxInfoSpot, ColumnRegistry.McxCurrencySpot, SecurityTypes.Stock));
			tables.Add(McxCurrencyCurrency = new PlazaTable(PlazaTableSystemName.McxCurrency, "Валютный рынок: справочник валют", StreamRegistry.McxInfoCurrency, ColumnRegistry.McxCurrencyCurrency, SecurityTypes.Stock));
			tables.Add(McxBoardsSpot = new PlazaTable(PlazaTableSystemName.McxBoards, "Фондовый рынок: режимы торгов", StreamRegistry.McxInfoSpot, ColumnRegistry.McxBoardsSpot, SecurityTypes.Stock));
			tables.Add(McxBoardsCurrency = new PlazaTable(PlazaTableSystemName.McxBoards, "Валютный рынок: режимы торгов", StreamRegistry.McxInfoCurrency, ColumnRegistry.McxBoardsCurrency, SecurityTypes.Stock));
			tables.Add(McxMarketsSpot = new PlazaTable(PlazaTableSystemName.McxMarkets, "Фондовый рынок: рынки", StreamRegistry.McxInfoSpot, ColumnRegistry.McxMarketsSpot, SecurityTypes.Stock));
			tables.Add(McxMarketsCurrency = new PlazaTable(PlazaTableSystemName.McxMarkets, "Валютный рынок: рынки", StreamRegistry.McxInfoCurrency, ColumnRegistry.McxMarketsCurrency, SecurityTypes.Stock));
			tables.Add(McxSettleCodesSpot = new PlazaTable(PlazaTableSystemName.McxSettleCodes, "Фондовый рынок: коды расчётов", StreamRegistry.McxInfoSpot, ColumnRegistry.McxSettleCodesSpot, SecurityTypes.Stock));
			tables.Add(McxSettleCodesCurrency = new PlazaTable(PlazaTableSystemName.McxSettleCodes, "Валютный рынок: коды расчётов", StreamRegistry.McxInfoCurrency, ColumnRegistry.McxSettleCodesCurrency, SecurityTypes.Stock));
			tables.Add(McxTeSysTimeSpot = new PlazaTable(PlazaTableSystemName.McxTeSysTime, "Фондовый рынок: системное время торгового сервера", StreamRegistry.McxInfoSpot, ColumnRegistry.McxTeSysTimeSpot, SecurityTypes.Stock));
			tables.Add(McxTeSysTimeCurrency = new PlazaTable(PlazaTableSystemName.McxTeSysTime, "Валютный рынок: системное время торгового сервера", StreamRegistry.McxInfoCurrency, ColumnRegistry.McxTeSysTimeCurrency, SecurityTypes.Stock));
			tables.Add(McxTradeTimeSpot = new PlazaTable(PlazaTableSystemName.McxTradeTime, "Фондовый рынок: расписание торгов", StreamRegistry.McxInfoSpot, ColumnRegistry.McxTradeTimeSpot, SecurityTypes.Stock));
			tables.Add(McxTradeTimeCurrency = new PlazaTable(PlazaTableSystemName.McxTradeTime, "Валютный рынок: расписание торгов", StreamRegistry.McxInfoCurrency, ColumnRegistry.McxTradeTimeCurrency, SecurityTypes.Stock));
			tables.Add(McxBcMessagesSpot = new PlazaTable(PlazaTableSystemName.McxBcMessages, "Фондовый рынок: сообщения", StreamRegistry.McxInfoSpot, ColumnRegistry.McxBcMessagesSpot, SecurityTypes.Stock));
			tables.Add(McxBcMessagesCurrency = new PlazaTable(PlazaTableSystemName.McxBcMessages, "Валютный рынок: сообщения", StreamRegistry.McxInfoCurrency, ColumnRegistry.McxBcMessagesCurrency, SecurityTypes.Stock));
			tables.Add(McxTeInfoSpot = new PlazaTable(PlazaTableSystemName.McxTeInfo, "Фондовый рынок: информация о торговом сервере", StreamRegistry.McxInfoSpot, ColumnRegistry.McxTeInfoSpot, SecurityTypes.Stock));
			tables.Add(McxTeInfoCurrency = new PlazaTable(PlazaTableSystemName.McxTeInfo, "Валютный рынок: информация о торговом сервере", StreamRegistry.McxInfoCurrency, ColumnRegistry.McxTeInfoCurrency, SecurityTypes.Stock));
			tables.Add(McxTrdTimeTypesSpot = new PlazaTable(PlazaTableSystemName.McxTrdTimeTypes, "Фондовый рынок: типы событий расписания торгов", StreamRegistry.McxInfoSpot, ColumnRegistry.McxTrdTimeTypesSpot, SecurityTypes.Stock));
			tables.Add(McxTrdTimeTypesCurrency = new PlazaTable(PlazaTableSystemName.McxTrdTimeTypes, "Валютный рынок: типы событий расписания торгов", StreamRegistry.McxInfoCurrency, ColumnRegistry.McxTrdTimeTypesCurrency, SecurityTypes.Stock));
			tables.Add(McxSecSettleCodeSpot = new PlazaTable(PlazaTableSystemName.McxSecSettleCode, "Фондовый рынок: накопленный доход и ставки РЕПО на дату расчетов", StreamRegistry.McxInfoSpot, ColumnRegistry.McxSecSettleCodeSpot, SecurityTypes.Stock));
			tables.Add(McxSecSettleCodeCurrency = new PlazaTable(PlazaTableSystemName.McxSecSettleCode, "Валютный рынок: накопленный доход и ставки РЕПО на дату расчетов", StreamRegistry.McxInfoCurrency, ColumnRegistry.McxSecSettleCodeCurrency, SecurityTypes.Stock));

			AllTables = tables.ToArray();

			AggregationFutures = new[] { Aggregation5Future, Aggregation20Future, Aggregation50Future };
			AggregationOptions = new[] { Aggregation5Option, Aggregation20Option, Aggregation50Option };

			DefaultTables = new[]
			{
				CommonFuture,
				CommonOption,

				SessionContentsOption,
				SessionContentsFuture,

				Portfolios,
				Positions,

				TradeFuture,
				TradeOption,

				Session,

				OrdersLogFuture,
				OrdersLogOption,

				//VarMarginFuture,
				//VarMarginOption,

				//Volatility,

				Index

				// если включается IndexLog, то Index необходимо отключить
				//IndexLog,

				// по-умолчанию отключено
				//AnonymousOrdersLog
			};
		}

		/// <summary>
		/// Найти таблицу по иднентификатору <see cref="PlazaTable.Id"/>.
		/// </summary>
		/// <param name="id">Идентификатор таблицы.</param>
		/// <returns>Найденная таблица.</returns>
		public PlazaTable this[string id]
		{
			get
			{
				if (id.IsEmpty())
					throw new ArgumentNullException("id");

				var table = AllTables.FirstOrDefault(t => t.Id == id);

				if (table == null)
					throw new ArgumentException("Таблица {0} не найдена.".Put(id), "id");

				return table;
			}
		}

		/// <summary>
		/// Все таблицы.
		/// </summary>
		public readonly PlazaTable[] AllTables;

		/// <summary>
		/// Список таблиц, экспортируемых по-умолчанию.
		/// </summary>
		public readonly PlazaTable[] DefaultTables;

		/// <summary>
		/// Реестр всех колонок, описывающие метаданные Plaza.
		/// </summary>
		public readonly PlazaColumnRegistry ColumnRegistry;

		/// <summary>
		/// Реестр всех потоков данных сервера Плазы.
		/// </summary>
		public readonly PlazaStreamRegistry StreamRegistry;

		/// <summary>
		/// Фьючерсы: стакан глубиной 20 котировок.
		/// </summary>
		public readonly PlazaTable Aggregation20Future;

		/// <summary>
		/// Опционы: стакан глубиной 20 котировок.
		/// </summary>
		public readonly PlazaTable Aggregation20Option;

		/// <summary>
		/// Фьючерсы: стакан глубиной 50 котировок.
		/// </summary>
		public readonly PlazaTable Aggregation50Future;

		/// <summary>
		/// Фьючерсы: все таблицы стаканов.
		/// </summary>
		public readonly PlazaTable[] AggregationFutures;

		/// <summary>
		/// Опционы: стакан глубиной 50 котировок.
		/// </summary>
		public readonly PlazaTable Aggregation50Option;

		/// <summary>
		/// Фьючерсы: стакан глубиной 5 котировок.
		/// </summary>
		public readonly PlazaTable Aggregation5Future;

		/// <summary>
		/// Опционы: стакан глубиной 5 котировок.
		/// </summary>
		public readonly PlazaTable Aggregation5Option;

		/// <summary>
		/// Опционы: все таблицы стаканов.
		/// </summary>
		public readonly PlazaTable[] AggregationOptions;

		/// <summary>
		/// Фьючерсы: справочник инструментов облигаций.
		/// </summary>
		public readonly PlazaTable BondIsinFuture;

		/// <summary>
		/// Фьючерсы: НКД на даты выплат купонов.
		/// </summary>
		public readonly PlazaTable BondNkdFuture;

		/// <summary>
		/// Фьючерсы: размеры выплат номинальной стоимости облигации.
		/// </summary>
		public readonly PlazaTable BondNominalFuture;

		/// <summary>
		/// Фьючерсы: справочник параметров облигаций.
		/// </summary>
		public readonly PlazaTable BondRegistryFuture;

		/// <summary>
		/// Фьючерсы: общая информация по сессии.
		/// </summary>
		public readonly PlazaTable CommonFuture;

		/// <summary>
		/// Опционы: общая информация по сессии.
		/// </summary>
		public readonly PlazaTable CommonOption;

		/// <summary>
		/// Фьючерсы: журнал сделок.
		/// </summary>
		public readonly PlazaTable TradeFuture;

		/// <summary>
		/// Опционы: журнал сделок.
		/// </summary>
		public readonly PlazaTable TradeOption;

		/// <summary>
		/// Фьючерсы: отчет о поставке.
		/// </summary>
		public readonly PlazaTable DeliveryReportFuture;

		/// <summary>
		/// Опционы: заявки на экспирацию.
		/// </summary>
		public readonly PlazaTable ExpirationOrdersOption;

		/// <summary>
		/// Фьючерсы: служебная талица серверных часов.
		/// </summary>
		public readonly PlazaTable HeartBeatFuture;

		/// <summary>
		/// Таблица событий потока <see cref="PlazaStreamRegistry.TradeFuture"/>.
		/// </summary>
		public readonly PlazaTable TradeFutureSysEvents;

		/// <summary>
		/// Опционы: служебная талица серверных часов.
		/// </summary>
		public readonly PlazaTable HeartBeatOption;

		/// <summary>
		/// Таблица событий потока <see cref="PlazaStreamRegistry.TradeOption"/>.
		/// </summary>
		public readonly PlazaTable TradeOptionSysEvents;

		/// <summary>
		/// Фьючерсы: информация о ВМ, рассчитанной по результатам пром. клиринга.
		/// </summary>
		public readonly PlazaTable InterClearingInfoFuture;

		/// <summary>
		/// Опционы: информация о ВМ, рассчитанной по результатам пром. клиринга.
		/// </summary>
		public readonly PlazaTable InterClearingInfoOption;

		/// <summary>
		/// Фьючерсы: журнал сделок по связкам.
		/// </summary>
		public readonly PlazaTable MultiLegDealFuture;

		/// <summary>
		/// Фьючерсы: журнал заявок по связкам.
		/// </summary>
		public readonly PlazaTable MultiLegOrdersLogFuture;

		/// <summary>
		/// Фьючерсы: срез стакана (информация о стаканах).
		/// </summary>
		public readonly PlazaTable OrderBookInfoFuture;

		/// <summary>
		/// Опционы: срез стакана (информация о стаканах).
		/// </summary>
		public readonly PlazaTable OrderBookInfoOption;

		/// <summary>
		/// Фьючерсы: срез стакана (логовая таблица заявок).
		/// </summary>
		public readonly PlazaTable OrderBookOrdersFuture;

		/// <summary>
		/// Опционы: срез стакана (логовая таблица заявок).
		/// </summary>
		public readonly PlazaTable OrderBookOrdersOption;

		/// <summary>
		/// Фьючерсы: журнал заявок по связкам.
		/// </summary>
		public readonly PlazaTable OrdersLogFuture;

		/// <summary>
		/// Опционы: журнал заявок.
		/// </summary>
		public readonly PlazaTable OrdersLogOption;

		/// <summary>
		/// Средства и лимиты клиентов.
		/// </summary>
		public readonly PlazaTable Portfolios;

		/// <summary>
		/// Таблица событий потока <see cref="PlazaStreamRegistry.Portfolios"/>.
		/// </summary>
		public readonly PlazaTable PortfoliosSysEvents;

		/// <summary>
		/// Позиции клиентов.
		/// </summary>
		public readonly PlazaTable Positions;

		/// <summary>
		/// Таблица событий потока <see cref="PlazaStreamRegistry.Positions"/>.
		/// </summary>
		public readonly PlazaTable PositionsSysEvents;

		/// <summary>
		/// Фьючерсы: отвергнутые в клиринг заявки.
		/// </summary>
		public readonly PlazaTable RejectedOrdersFuture;

		/// <summary>
		/// Опционы: отвергнутые в клиринг заявки.
		/// </summary>
		public readonly PlazaTable RejectedOrdersOption;

		/// <summary>
		/// Индексы.
		/// </summary>
		public readonly PlazaTable Index;

		/// <summary>
		/// История значений индексов.
		/// </summary>
		public readonly PlazaTable IndexLog;

		/// <summary>
		/// Фьючерсы: cправочник торгуемых инструментов.
		/// </summary>
		public readonly PlazaTable SessionContentsFuture;

		/// <summary>
		/// Справочник инструментов.
		/// </summary>
		public readonly PlazaTable Securities;

		/// <summary>
		/// Опционы: справочник торгуемых инструментов.
		/// </summary>
		public readonly PlazaTable SessionContentsOption;

		/// <summary>
		/// Фьючерсы: информация о торговой сессии.
		/// </summary>
		public readonly PlazaTable Session;

		/// <summary>
		/// Справочник связок.
		/// </summary>
		public readonly PlazaTable MultiLeg;

		/// <summary>
		/// Cообщения торговой системы для потока <see cref="PlazaStreamRegistry.Info"/>.
		/// </summary>
		public readonly PlazaTable InfoSysMessages;

		/// <summary>
		/// Опционы: результаты клиринга - волатильность и теоретические цены.
		/// </summary>
		public readonly PlazaTable SessionSettlementOption;

		/// <summary>
		/// Таблица событий потока <see cref="PlazaStreamRegistry.InfoOption"/>.
		/// </summary>
		public readonly PlazaTable InfoOptionSysEvents;

		/// <summary>
		/// Фьючерсы: результаты клиринга - расчетные цены.
		/// </summary>
		public readonly PlazaTable SessionSettlementFuture;

		/// <summary>
		/// Таблица системных сообщений потока <see cref="PlazaStreamRegistry.InfoFuture"/>.
		/// </summary>
		public readonly PlazaTable InfoFutureSysMessages;

		/// <summary>
		/// Таблица событий потока <see cref="PlazaStreamRegistry.InfoFuture"/>.
		/// </summary>
		public readonly PlazaTable InfoFutureSysEvents;

		/// <summary>
		/// Трансляция курса USD.
		/// </summary>
		public readonly PlazaTable UsdOnline;

		/// <summary>
		/// Фьючерсы.
		/// </summary>
		public readonly PlazaTable VcbFuture;

		/// <summary>
		/// Опционы.
		/// </summary>
		public readonly PlazaTable VcbOption;

		/// <summary>
		/// Вариационная маржа по фьючерсам.
		/// </summary>
		public readonly PlazaTable VarMarginFuture;

		/// <summary>
		/// Вариационная маржа по опционам.
		/// </summary>
		public readonly PlazaTable VarMarginOption;

		/// <summary>
		/// Волатильность.
		/// </summary>
		public readonly PlazaTable Volatility;

		/// <summary>
		/// Таблица с коэффициентами волатильности.
		/// </summary>
		public readonly PlazaTable VolatilitySmile;

		/// <summary>
		/// Клиентские деньги в клиринге.
		/// </summary>
		public readonly PlazaTable ClearingMoney;

		/// <summary>
		/// Таблица событий потока <see cref="PlazaStreamRegistry.ClearingMoney"/>.
		/// </summary>
		public readonly PlazaTable ClearingMoneySysEvents;

		/// <summary>
		/// Параметры базовых контрактов.
		/// </summary>
		public readonly PlazaTable BaseContractsParams;

		/// <summary>
		/// Параметры фьючерсов.
		/// </summary>
		public readonly PlazaTable FuturesParams;

		/// <summary>
		/// Параметры виртуальных фьючерсов.
		/// </summary>
		public readonly PlazaTable VirtualFuturesParams;

		/// <summary>
		/// Параметры опционов.
		/// </summary>
		public readonly PlazaTable OptionsParams;

		/// <summary>
		/// Информация о параметрах фирм.
		/// </summary>
		public readonly PlazaTable BrokerParams;

		/// <summary>
		/// Информация о параметрах клиентов.
		/// </summary>
		public readonly PlazaTable ClientParams;

		/// <summary>
		/// Справочник имен фирм.
		/// </summary>
		public readonly PlazaTable Diler;

		/// <summary>
		/// Справочник клиентов.
		/// </summary>
		public readonly PlazaTable Investor;

		/// <summary>
		/// Обязательства ММ по фьючерсам.
		/// </summary>
		public readonly PlazaTable MarketMakingFuture;

		/// <summary>
		/// Обязательства ММ по опционам.
		/// </summary>
		public readonly PlazaTable MarketMakingOption;

		/// <summary>
		/// Журнал заявок. Анонимный order_log.
		/// </summary>
		public readonly PlazaTable AnonymousOrdersLog;

		/// <summary>
		/// Журнал заявок по связкам. Анонимный order_log.
		/// </summary>
		public readonly PlazaTable AnonymousMultiLegOrdersLog;

		/// <summary>
		/// Таблица событий потока <see cref="PlazaStreamRegistry.OrdersLog"/>.
		/// </summary>
		public readonly PlazaTable AnonymousSysEvents;

		/// <summary>
		/// Фондовый рынок: все сделки.
		/// </summary>
		public readonly PlazaTable McxTradesSpot;

		/// <summary>
		/// Валютный рынок: все сделки.
		/// </summary>
		public readonly PlazaTable McxTradesCurrency;

		/// <summary>
		/// Фондовый рынок: общая информация по инструментам.
		/// </summary>
		public readonly PlazaTable McxCommonSpot;

		/// <summary>
		/// Валютный рынок: общая информация по инструментам.
		/// </summary>
		public readonly PlazaTable McxCommonCurrency;

		/// <summary>
		/// Фондовый рынок: котировки по инструментам.
		/// </summary>
		public readonly PlazaTable McxOrderBookSpot;

		/// <summary>
		/// Валютный рынок: котировки по инструментам.
		/// </summary>
		public readonly PlazaTable McxOrderBookCurrency;

		/// <summary>
		/// Фондовый рынок: параметры инструментов.
		/// </summary>
		public readonly PlazaTable McxSecuritiesSpot;

		/// <summary>
		/// Валютный рынок: параметры инструментов.
		/// </summary>
		public readonly PlazaTable McxSecuritiesCurrency;

		/// <summary>
		/// Фондовый рынок: справочник валют.
		/// </summary>
		public readonly PlazaTable McxCurrencySpot;

		/// <summary>
		/// Валютный рынок: справочник валют.
		/// </summary>
		public readonly PlazaTable McxCurrencyCurrency;

		/// <summary>
		/// Фондовый рынок: режимы торгов.
		/// </summary>
		public readonly PlazaTable McxBoardsSpot;

		/// <summary>
		/// Валютный рынок: режимы торгов.
		/// </summary>
		public readonly PlazaTable McxBoardsCurrency;

		/// <summary>
		/// Фондовый рынок: рынки.
		/// </summary>
		public readonly PlazaTable McxMarketsSpot;

		/// <summary>
		/// Валютный рынок: рынки.
		/// </summary>
		public readonly PlazaTable McxMarketsCurrency;

		/// <summary>
		/// Фондовый рынок: коды расчётов.
		/// </summary>
		public readonly PlazaTable McxSettleCodesSpot;

		/// <summary>
		/// Валютный рынок: коды расчётов.
		/// </summary>
		public readonly PlazaTable McxSettleCodesCurrency;

		/// <summary>
		/// Фондовый рынок: системное время торгового сервера.
		/// </summary>
		public readonly PlazaTable McxTeSysTimeSpot;

		/// <summary>
		/// Валютный рынок: системное время торгового сервера.
		/// </summary>
		public readonly PlazaTable McxTeSysTimeCurrency;

		/// <summary>
		/// Фондовый рынок: расписание торгов.
		/// </summary>
		public readonly PlazaTable McxTradeTimeSpot;

		/// <summary>
		/// Валютный рынок: расписание торгов.
		/// </summary>
		public readonly PlazaTable McxTradeTimeCurrency;

		/// <summary>
		/// Фондовый рынок: сообщения.
		/// </summary>
		public readonly PlazaTable McxBcMessagesSpot;

		/// <summary>
		/// Валютный рынок: сообщения.
		/// </summary>
		public readonly PlazaTable McxBcMessagesCurrency;

		/// <summary>
		/// Фондовый рынок: информация о торговом сервере.
		/// </summary>
		public readonly PlazaTable McxTeInfoSpot;

		/// <summary>
		/// Валютный рынок: информация о торговом сервере.
		/// </summary>
		public readonly PlazaTable McxTeInfoCurrency;

		/// <summary>
		/// Фондовый рынок: типы событий расписания торгов.
		/// </summary>
		public readonly PlazaTable McxTrdTimeTypesSpot;

		/// <summary>
		/// Валютный рынок: типы событий расписания торгов.
		/// </summary>
		public readonly PlazaTable McxTrdTimeTypesCurrency;

		/// <summary>
		/// Фондовый рынок: накопленный доход и ставки РЕПО на дату расчетов.
		/// </summary>
		public readonly PlazaTable McxSecSettleCodeSpot;

		/// <summary>
		/// Валютный рынок: накопленный доход и ставки РЕПО на дату расчетов.
		/// </summary>
		public readonly PlazaTable McxSecSettleCodeCurrency;
	}
}